From ab6d52907c8560c825b8a069f1766e02478ed068 Mon Sep 17 00:00:00 2001 From: "kaf24@firebug.cl.cam.ac.uk" Date: Thu, 11 Aug 2005 20:58:08 +0000 Subject: [PATCH] Fix config file parsing for VMX domains. If we define "vif" in the config file, image.py will raise error "vmx: missing vbd configuration". The reason is "vif" is dealt with as a "vbd" device. This patch fixes this issue by dealing with "vbd" and "vif " separately, removing "macaddr" arg and parsing mac address from "vif" instead. Also, the vbd doesn't have to be a file anymore, but can be a physical disk partition. Signed-off-by: Yunfeng Zhao Signed-off-by: Arun Sharma --- tools/examples/xmexample.vmx | 5 ----- tools/python/xen/xend/image.py | 31 ++++++++++++++++++------------- 2 files changed, 18 insertions(+), 18 deletions(-) diff --git a/tools/examples/xmexample.vmx b/tools/examples/xmexample.vmx index 1c85a02d4c..830fdc11e7 100644 --- a/tools/examples/xmexample.vmx +++ b/tools/examples/xmexample.vmx @@ -132,8 +132,3 @@ vnc=1 #----------------------------------------------------------------------------- # start in full screen #full-screen=1 - -#----------------------------------------------------------------------------- -# set the mac address of the first interface -#macaddr= - diff --git a/tools/python/xen/xend/image.py b/tools/python/xen/xend/image.py index 608fe55c6b..908299d626 100644 --- a/tools/python/xen/xend/image.py +++ b/tools/python/xen/xend/image.py @@ -305,7 +305,7 @@ class VmxImageHandler(ImageHandler): # xm config file def parseDeviceModelArgs(self): dmargs = [ 'cdrom', 'boot', 'fda', 'fdb', - 'localtime', 'serial', 'macaddr', 'stdvga', 'isa' ] + 'localtime', 'serial', 'stdvga', 'isa' ] ret = [] for a in dmargs: v = sxp.child_value(self.vm.config, a) @@ -322,20 +322,25 @@ class VmxImageHandler(ImageHandler): ret.append("-%s" % a) ret.append("%s" % v) - # Handle hd img related options + # Handle disk/network related options devices = sxp.children(self.vm.config, 'device') for device in devices: - vbdinfo = sxp.child(device, 'vbd') - if not vbdinfo: - raise VmError("vmx: missing vbd configuration") - uname = sxp.child_value(vbdinfo, 'uname') - vbddev = sxp.child_value(vbdinfo, 'dev') - (vbdtype, vbdparam) = string.split(uname, ':', 1) - vbddev_list = ['hda', 'hdb', 'hdc', 'hdd'] - if vbdtype != 'file' or vbddev not in vbddev_list: - raise VmError("vmx: for qemu vbd type=file&dev=hda~hdd") - ret.append("-%s" % vbddev) - ret.append("%s" % vbdparam) + name = sxp.name(sxp.child0(device)) + if name == 'vbd': + vbdinfo = sxp.child(device, 'vbd') + uname = sxp.child_value(vbdinfo, 'uname') + vbddev = sxp.child_value(vbdinfo, 'dev') + (vbdtype, vbdparam) = string.split(uname, ':', 1) + vbddev_list = ['hda', 'hdb', 'hdc', 'hdd'] + if vbddev not in vbddev_list: + raise VmError("vmx: for qemu vbd type=file&dev=hda~hdd") + ret.append("-%s" % vbddev) + ret.append("%s" % vbdparam) + if name == 'vif': + vifinfo = sxp.child(device, 'vif') + mac = sxp.child_value(vifinfo, 'mac') + ret.append("-macaddr") + ret.append("%s" % mac) # Handle graphics library related options vnc = sxp.child_value(self.vm.config, 'vnc') -- 2.30.2